Эластичное масштабирование и упаковка по фазам
Версия: 1.0 Дата: 25.04.2026 Статус: Утверждён
Платформа Vitiana проектируется как эластичная самомасштабирующаяся система (elastically auto-scaling system) с самого первого документа.
Стратегия упаковки вычислений (compute packaging) — не одна и та же на всех этапах. Она разворачивается поэтапно, и каждый этап зафиксирован в документации заранее с обоснованием: когда переключаться, на что, почему.
Зафиксировано 25.04.2026.
Главный тезис
Где запускается каждый сервис (общий контейнер, выделенный контейнер, выделенный сервер, serverless function, dedicated infrastructure) — это решение с явным триггером, не «как получится». Все 4 фазы упаковки и метрические триггеры перехода — описаны в документации с самого начала, не «когда понадобится».
Эластичное масштабирование как baseline
Что включает с первого дня
- Горизонтальное масштабирование (horizontal scaling) как первичный путь для всех stateless контуров.
- Автоматическое масштабирование (auto-scaling) на основе метрик нагрузки: CPU, memory, queue lag, request rate, p95/p99 latency, custom domain metrics (active quotes, pending bookings, supplier pressure).
- Изоляция execution contours с независимым масштабированием. См.
operations/deployment.md. - Capacity envelope per tenant tier — гарантированная ёмкость для премиум-партнёров, fair-share для остальных.
- Backpressure discipline на async-очередях для предотвращения каскадных сбоев.
- Graceful degradation при перегрузке — не отказ, а понижение качества (читать — да, новый booking — отказать с retry-after).
Что не должно быть в документах
- «Масштабируем потом» / «MVP без auto-scaling».
- Жёсткие cluster sizes как final («3 ноды PostgreSQL навсегда»).
- Vertical scaling как primary strategy для stateless workloads.
- Подход «один контейнер на все».
Стратегия упаковки вычислений по фазам
Каждый execution contour имеет свой профиль: latency-sensitive / throughput-heavy / stateful / replay-sensitive / financially-critical. Упаковка зависит от профиля и фазы зрелости платформы.
Фаза 1 — Bootstrap (controlled internal platform)
Цель: доказать viability ядра, ingestion, offer/quote/booking path.
Упаковка:
- Большая часть сервисов — общий containerized environment (single Kubernetes namespace или managed container platform).
- PostgreSQL — managed instance с read replicas (Cloud SQL / RDS paradigm).
- Redis — managed cache.
- OpenSearch — managed instance.
- Async-очереди — managed broker (managed Kafka / Pub/Sub / SQS paradigm).
Обоснование: скорость доставки и единый operational model важнее infrastructure optimization. Стоимость auto-scaling ниже стоимости человеческого operations.
Триггеры выхода из фазы (когда документ обязан вести в Фазу 2):
- Регулярное превышение auto-scaling envelope в одном контуре.
- Латентность одного контура начинает деградировать другие из-за shared resources.
- Стоимость инфраструктуры на одного активного tenant превышает порог X.
Фаза 2 — Service isolation (controlled external beta)
Цель: разделить execution contours по operational profile.
Упаковка:
- Latency-sensitive контуры (search, partner API, gateway) — отдельные deployment groups с гарантированной capacity.
- Throughput-heavy контуры (ingestion, intake workers) — отдельный pool, не влияющий на latency-sensitive.
- Replay-sensitive jobs — изолированный compute pool (replay не должен влиять на live).
- Financially-critical контуры (booking commit, settlement event generation) — изолированный compute pool с отдельными SLO.
- PostgreSQL — primary с read replicas; начинается обсуждение partitioning.
- Каналы событий — отдельные кластеры или dedicated topics для critical event families.
Обоснование: разные contours имеют разные SLO, и shared compute создаёт contention.
Триггеры выхода из фазы:
- Один tenant создаёт нагрузку, которая влияет на других.
- Конкретный supplier создаёт ingestion peak, который перекладывает offer assembly.
- Settlement event volume требует dedicated processing capacity.
Фаза 3 — Workload-specific packaging (production-capable)
Цель: оптимизировать стоимость и SLO.
Упаковка:
- Тяжёлые ingestion jobs (Rust) — могут переехать на dedicated nodes / spot instances для cost optimization.
- Latency-critical core (Go) — premium nodes, gateway-co-located.
- Search engine — dedicated cluster, возможно multi-region для latency.
- Database tier — partitioning по доменам (canonical / supplier trace / booking / governance), возможно отдельные кластеры.
- ML serving — отдельная inference infrastructure (потенциально GPU-accelerated для дорогих моделей).
- Tenant tier isolation — premium tenants могут получать dedicated compute pool.
Обоснование: unit economics требует разной упаковки для разных профилей. ML inference на CPU-only кластере — расточительно. Dedicated tenants — конкурентное преимущество.
Триггеры выхода из фазы:
- Регуляторные требования к data residency (GDPR + KZ + UA).
- Multi-region expansion.
- Premium SLO для крупных партнёров требует physical isolation.
Фаза 4 — Multi-region и dedicated infrastructure
Цель: глобальное присутствие и enterprise-grade tenant isolation.
Упаковка:
- Multi-region active-active для read paths (search, content, public API).
- Multi-region active-passive для write paths (booking commit) с явной consistency model.
- Dedicated infrastructure для enterprise tenants — отдельный cluster, отдельная database, отдельный network namespace.
- Edge compute для high-latency regions (если CDN + edge functions релевантны для search).
- Disaster recovery с RTO/RPO targets, geo-redundant backup.
Обоснование: enterprise-партнёры требуют SLA, которые невозможны на shared infrastructure. Регуляторы требуют data residency.
Что обязательно зафиксировано в документации сразу
В документе Scaling and Packaging Roadmap (operations/scaling-and-packaging-roadmap.md):
- Все 4 фазы с описанием.
- Триггеры перехода между фазами (метрические, не временные).
- Зависимости между фазой и доменными решениями (что должно быть готово в
reference/*к каждой фазе). - Обоснование каждого перехода тезисами.
- Список открытых развилок для каждой фазы.
В operations/deployment.md — текущий документ описывает execution contours; обновить ссылками на phase-specific packaging-стратегию.
В reference/implementation-technology-baseline.md — добавить раздел «Packaging strategy by phase» с явными ссылками.
Запрещённые паттерны
- Цементировать стратегию первой фазы как final («у нас всегда будет один Kubernetes namespace»).
- Переходить в Фазу 3 пока не пройдены условия Фазы 2.
- Выбирать packaging без явных триггеров (не «в Q3 2026 переедем», а «при достижении X bookings/day или Y latency p99 переедем»).
Как применять
При написании каждого operations / deployment / infrastructure документа задаю вопросы:
- На какой фазе работает текущее решение?
- Что является триггером перехода в следующую фазу?
- Что должно быть готово к этому переходу в других документах?
- Какие тезисы обосновывают именно такую упаковку для этой фазы?
Документ инфраструктуры без указания фазы и триггеров — недостаточен.
Связанная документация
- Закон 00000 — платформа главенствует над поставщиками — платформа сама решает, как масштабироваться. Поставщики не диктуют packaging.
- Современные лучшие практики верхнеуровневых платформ — все 4 фазы основаны на современных подходах.
- Развитие без деградации — каждый переход — рост capability, не workaround.
- Тезисное обоснование архитектурных решений — каждый триггер и каждое packaging-решение обосновано тезисно.
- Scaling and Packaging Roadmap — реализация этого правила: фазы, триггеры, зависимости.